﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using DevExpress.XtraEditors;
using System.Data.SqlClient;
using DevExpress.XtraEditors.Controls;

namespace TCCT_CTC_CSDLDangVienV1
{
    public partial class frmCanBoFilter : frmBase
    {
        public string SelectedDauMoiID = "";
        public string ConditionString = "", ConditionText = "";
        public List<SqlParameter> arrParam = new List<SqlParameter>();

        public frmCanBoFilter()
        {
            InitializeComponent();
        }

        private void frmCanBoFilter_Load(object sender, EventArgs e)
        {

            if (SelectedDauMoiID == "")
                SelectedDauMoiID = MyCommon.CurrentUserDauMoiID;
            ApplyUI();

            BindDataToColtrol();

            BindDataToGrid();

        }

        private void ApplyUI()
        {



            UI.Button.ApplyAccept(btnAccept);
            UI.Button.ApplyCancel(btnCancel);
            UI.Grid.ApplyDefault(dgData, false);
            MainGridView.OptionsView.NewItemRowPosition = DevExpress.XtraGrid.Views.Grid.NewItemRowPosition.Bottom;
            MainGridView.OptionsBehavior.Editable = true;
            MainGridView.OptionsView.ShowAutoFilterRow = false;
            MainGridView.OptionsBehavior.AllowAddRows = DevExpress.Utils.DefaultBoolean.Default;


        }
        private void BindDataToColtrol()
        {
            #region Binddata to cboChiTieuGrid
            cboChiTieuGrid.Properties.Columns.Clear();

            string sql = "Select * From tblCanBoCot";
            DataTable temDT = SqlHelper.ExecuteDataTable(CommandType.Text, sql);


            cboChiTieuGrid.Properties.Columns.Add(new LookUpColumnInfo("ID"));
            cboChiTieuGrid.Properties.Columns["ID"].Caption = "STT";
            cboChiTieuGrid.Properties.Columns["ID"].Width = 3;

            cboChiTieuGrid.Properties.Columns.Add(new LookUpColumnInfo("TieuDe"));
            cboChiTieuGrid.Properties.Columns["TieuDe"].Caption = "Chỉ tiêu";

            cboChiTieuGrid.Properties.DisplayMember = "TieuDe";
            cboChiTieuGrid.Properties.ValueMember = "TenCot";

            cboChiTieuGrid.Properties.DataSource = temDT.DefaultView;

            cboChiTieuGrid.Properties.TextEditStyle = TextEditStyles.Standard;
            #endregion Binddata to cboChiTieuGrid
        }
        private void BindDataToGrid()
        {
            string sql = "Select '' As LienKet, '' As TheMo, '' As ChiTieu, '' As SoSanh, '' As GiaTri, '' As TheDong, '' As SelectTag From tblCanBoCot Where 1>2";
            dgData.DataSource = SqlHelper.ExecuteDataTable(CommandType.Text, sql);
        }

        private void btnAccept_Click(object sender, EventArgs e)
        {
            if (MainGridView.RowCount == 1)
            {
                MyCommon.ShowDialogMessage("Bạn phải chọn ít nhất 1 điều kiện");
                return;
            }

            BuildCondition();

            if (ConditionString == "")
            {
                MyCommon.ShowDialogMessage("Bạn phải chọn ít nhất 1 điều kiện");
                return;
            }

            this.DialogResult = DialogResult.OK;
            this.Close();
        }
        void SetNull()
        {
            ConditionString = "";

            ConditionText = "";
            arrParam.Clear();
        }
        void BuildCondition()
        {
            SetNull();

            string SoSanh = "", ChiTieu = "", TenCot = "", GiaTri = "", TheDong = "", TheMo = "", SelectedTag = "", LienKet = "";
            for (int i = 0; i < MainGridView.RowCount - 1; i++)
            {
                #region đọc giá trị
                if (MainGridView.GetRowCellValue(i, "LienKet").ToString() == "")
                    MainGridView.SetRowCellValue(i, "LienKet", "AND");

                SoSanh = MainGridView.GetRowCellValue(i, "SoSanh").ToString();
                ChiTieu = MainGridView.GetRowCellValue(i, "ChiTieu").ToString();
                TenCot = ChiTieu;
                GiaTri = MainGridView.GetRowCellValue(i, "GiaTri").ToString();
                TheDong = MainGridView.GetRowCellValue(i, "TheDong").ToString();
                TheMo = MainGridView.GetRowCellValue(i, "TheMo").ToString();
                SelectedTag = MainGridView.GetRowCellValue(i, "SelectTag").ToString();
                LienKet = MainGridView.GetRowCellValue(i, "LienKet").ToString();

                ConditionText += LienKet + " " + TheMo.Trim() + " '" + MainGridView.GetRowCellDisplayText(i, "ChiTieu").ToString() + "' " + SoSanh.Trim() + " '" + GiaTri.Trim() + "' " + TheDong.Trim();
                ConditionText = ConditionText.Replace("AND", "VÀ").Replace("OR", "HOẶC").Replace("Like", "Giống như");

                if (ChiTieu == "Cap_Bac" || ChiTieu == "Lan_NLuong" || ChiTieu == "Chuc_Vu" || ChiTieu == "Don_Vi_CT" || ChiTieu == "Khoi_CTac" || ChiTieu == "Binh_Chung" || ChiTieu == "Loai_CBo" || ChiTieu == "Van_Hoa" || ChiTieu == "HocHam" || ChiTieu == "HocVi" || ChiTieu == "Nguon_VDN" || ChiTieu == "NQuan_HT" || ChiTieu == "TQuan_HT" || ChiTieu == "Loai_SKhoe" || ChiTieu == "Huong_SD" || ChiTieu == "Ly_Do_Vao" || ChiTieu == "Ly_Do_Ra")
                    ChiTieu = "Ten" + ChiTieu;
                #endregion đọc giá trị

                if (SoSanh == "#") SoSanh = "<>";

                if (TenCot.Substring(0, 4) == "QTCD")
                {
                    #region Build điều kiện tìm kiếm theo QTCD

                    if (SoSanh == "Like") //không like theo Datetime, các trường làm khóa ngoại
                    {
                        if (TenCot == "QTCDCh_Truong" || TenCot == "QTCDBat_Dau" || TenCot == "QTCDKet_Thuc" || TenCot == "QTCDCVi_ChDau")
                        {
                            MyCommon.ShowDialogMessage("Không áp dụng so sánh LIKE với các trường trường dữ liệu: Bắt đầu; Kết thúc; Chiến trường chiến đấu; Cương vị chiến đấu");
                            SetNull();
                            return;
                        }
                        else
                        {
                            ConditionString += LienKet + " CB.Khoa In (Select Khoa From tblQT_CD QTCD Where QTCD.DauMoiID=CB.DauMoiID And QTCD." + TenCot.Replace("QTCD", "") + " Like @" + TenCot + i + ") ";
                            arrParam.Add(SqlHelper.CreateParameterObject("@" + TenCot + i, SqlDbType.NVarChar, ParameterDirection.Input, "%" + GiaTri + "%"));
                        }
                    }
                    else
                    {
                        if (TenCot == "QTCDBat_Dau" || TenCot == "QTCDKet_Thuc")
                        {
                            #region Nếu là ngày tháng và giá trị là sai thì setnull
                            GiaTri = MyCommon.MyDateTime.ToYYYYMMDD(GiaTri);
                            if (GiaTri == "")
                            {
                                MyCommon.ShowDialogMessage("Giá trị ngày tháng phải được nhập theo các dạng sau: yyyy; MM/yyyy; dd/MM/yyyy");
                                SetNull();
                                return;
                            }

                            ConditionString += LienKet + " CB.Khoa In (Select Khoa From tblQT_CD QTCD Where QTCD.DauMoiID=CB.DauMoiID And QTCD." + TenCot.Replace("QTCD", "") + " " + SoSanh + " @" + TenCot + i + ") ";
                            arrParam.Add(SqlHelper.CreateParameterObject("@" + TenCot + i, SqlDbType.DateTime, ParameterDirection.Input, MyCommon.MyDateTime.ToDate_YMD(GiaTri)));
                            #endregion Nếu là ngày tháng và giá trị là sai thì setnull
                        }
                        else
                        {
                            #region tất cả trường hợp khác

                            ConditionString += LienKet + " CB.Khoa In (Select Khoa From tblQT_CD QTCD Where QTCD.DauMoiID=CB.DauMoiID And QTCD." + TenCot.Replace("QTCD", "") + " " + SoSanh + " @" + TenCot + i + ") ";

                            if (TenCot == "QTCDCh_Truong" || TenCot == "QTCDCVi_ChDau")
                            {
                                //Các trường lấy dữ liệu trong danh mục từ điển chỉ cho phép so sánh bằng, và so sánh khác
                                if (SoSanh != "=" && SoSanh != "<>")
                                {
                                    MyCommon.ShowDialogMessage("Các trường dữ liệu lấy trong danh mục từ điển chỉ cho phép so sánh bằng, so sánh khác ");
                                    SetNull();
                                    return;
                                }
                                GiaTri = SelectedTag;
                            }
                            arrParam.Add(SqlHelper.CreateParameterObject("@" + TenCot + i, SqlDbType.NVarChar, ParameterDirection.Input, GiaTri));
                            #endregion tất cả trường hợp khác
                        }
                    }
                    #endregion Build điều kiện tìm kiếm theo QTCD
                }
                else if (TenCot.Substring(0, 4) == "QTCT")
                {
                    #region Build điều kiện tìm kiếm theo QTCT


                    if (SoSanh == "Like")//không like theo Datetime, các trường làm khóa ngoại
                    {
                        if (TenCot == "QTCTTu" || TenCot == "QTCTDen" || TenCot == "QTCTChuc" || TenCot == "QTCTDonVi"
                            || TenCot == "QTCTTG_Cap" || TenCot == "QTCTTG_Dang")
                        {
                            MyCommon.ShowDialogMessage("Không áp dụng so sánh LIKE với các trường dữ liệu ngày tháng và danh mục");
                            SetNull();
                            return;
                        }
                        else
                        {
                            ConditionString += LienKet + " CB.Khoa In (Select Khoa From tblQT_CT QTCT Where QTCT.DauMoiID=CB.DauMoiID And QTCT." + TenCot.Replace("QTCT", "") + " Like @" + TenCot + i + ") ";
                            arrParam.Add(SqlHelper.CreateParameterObject("@" + TenCot + i, SqlDbType.NVarChar, ParameterDirection.Input, "%" + GiaTri + "%"));
                        }
                    }
                    else
                    {
                        if (TenCot == "QTCTTu" || TenCot == "QTCTDen" || TenCot == "QTCTTG_Cap" || TenCot == "QTCTTG_Dang")
                        {
                            #region Nếu là ngày tháng và giá trị là sai thì setnull
                            GiaTri = MyCommon.MyDateTime.ToYYYYMMDD(GiaTri);
                            if (GiaTri == "")
                            {
                                MyCommon.ShowDialogMessage("Giá trị ngày tháng phải được nhập theo các dạng sau: yyyy; MM/yyyy; dd/MM/yyyy");
                                SetNull();
                                return;
                            }

                            ConditionString += LienKet + " CB.Khoa In (Select Khoa From tblQT_CT QTCT Where QTCT.DauMoiID=CB.DauMoiID And QTCT." + TenCot.Replace("QTCT", "") + " " + SoSanh + " @" + TenCot + i + ") ";
                            arrParam.Add(SqlHelper.CreateParameterObject("@" + TenCot + i, SqlDbType.DateTime, ParameterDirection.Input, MyCommon.MyDateTime.ToDate_YMD(GiaTri)));
                            #endregion Nếu là ngày tháng và giá trị là sai thì setnull
                        }
                        else
                        {
                            #region tất cả trường hợp khác

                            ConditionString += LienKet + " CB.Khoa In (Select Khoa From tblQT_CT QTCT Where QTCT.DauMoiID=CB.DauMoiID And QTCT." + TenCot.Replace("QTCT", "") + " " + SoSanh + " @" + TenCot + i + ") ";

                            if (TenCot == "QTCTChuc" || TenCot == "QTCTDonVi")
                            {
                                //Các trường lấy dữ liệu trong danh mục từ điển chỉ cho phép so sánh bằng, và so sánh khác
                                if (SoSanh != "=" && SoSanh != "<>")
                                {
                                    MyCommon.ShowDialogMessage("Các trường dữ liệu lấy trong danh mục từ điển chỉ cho phép so sánh bằng, so sánh khác ");
                                    SetNull();
                                    return;
                                }
                                GiaTri = SelectedTag;
                            }
                            arrParam.Add(SqlHelper.CreateParameterObject("@" + TenCot + i, SqlDbType.NVarChar, ParameterDirection.Input, GiaTri));
                            #endregion tất cả trường hợp khác
                        }
                    }
                    #endregion Build điều kiện tìm kiếm theo QTCT
                }

                else if (TenCot.Substring(0, 4) == "QTDG")
                {
                    #region Build điều kiện tìm kiếm theo QTDG


                    if (SoSanh == "Like")//không like theo Datetime, các trường làm khóa ngoại
                    {
                        if (TenCot == "QTDGSKien_DGia" || TenCot == "QTDGThang_SK")
                        {
                            MyCommon.ShowDialogMessage("Không áp dụng so sánh LIKE với các trường dữ liệu ngày tháng và danh mục");
                            SetNull();
                            return;
                        }
                        else
                        {
                            ConditionString += LienKet + " CB.Khoa In (Select Khoa From tblQT_DG QTDG Where QTDG.DauMoiID=CB.DauMoiID And QTDG." + TenCot.Replace("QTDG", "") + " Like @" + TenCot + i + ") ";
                            arrParam.Add(SqlHelper.CreateParameterObject("@" + TenCot + i, SqlDbType.NVarChar, ParameterDirection.Input, "%" + GiaTri + "%"));
                        }
                    }
                    else
                    {
                        if (TenCot == "QTDGThang_SK")
                        {
                            #region Nếu là ngày tháng và giá trị là sai thì setnull
                            GiaTri = MyCommon.MyDateTime.ToYYYYMMDD(GiaTri);
                            if (GiaTri == "")
                            {
                                MyCommon.ShowDialogMessage("Giá trị ngày tháng phải được nhập theo các dạng sau: yyyy; MM/yyyy; dd/MM/yyyy");
                                SetNull();
                                return;
                            }

                            ConditionString += LienKet + " CB.Khoa In (Select Khoa From tblQT_DG QTDG Where QTDG.DauMoiID=CB.DauMoiID And QTDG." + TenCot.Replace("QTDG", "") + " " + SoSanh + " @" + TenCot + i + ") ";
                            arrParam.Add(SqlHelper.CreateParameterObject("@" + TenCot + i, SqlDbType.DateTime, ParameterDirection.Input, MyCommon.MyDateTime.ToDate_YMD(GiaTri)));
                            #endregion Nếu là ngày tháng và giá trị là sai thì setnull
                        }
                        else
                        {
                            #region tất cả trường hợp khác

                            ConditionString += LienKet + " CB.Khoa In (Select Khoa From tblQT_DG QTDG Where QTDG.DauMoiID=CB.DauMoiID And QTDG." + TenCot.Replace("QTDG", "") + " " + SoSanh + " @" + TenCot + i + ") ";

                            if (TenCot == "QTDGSKien_DGia")
                            {
                                //Các trường lấy dữ liệu trong danh mục từ điển chỉ cho phép so sánh bằng, và so sánh khác
                                if (SoSanh != "=" && SoSanh != "<>")
                                {
                                    MyCommon.ShowDialogMessage("Các trường dữ liệu lấy trong danh mục từ điển chỉ cho phép so sánh bằng, so sánh khác ");
                                    SetNull();
                                    return;
                                }
                                GiaTri = SelectedTag;
                            }
                            arrParam.Add(SqlHelper.CreateParameterObject("@" + TenCot + i, SqlDbType.NVarChar, ParameterDirection.Input, GiaTri));
                            #endregion tất cả trường hợp khác
                        }
                    }
                    #endregion Build điều kiện tìm kiếm theo QTDG
                }

                else if (TenCot.Substring(0, 4) == "QTDT")
                {
                    #region Build điều kiện tìm kiếm theo QTDT


                    if (SoSanh == "Like")//không like theo Datetime, các trường làm khóa ngoại
                    {
                        if (TenCot == "QTDTLoai_Hinh" || TenCot == "QTDTCap_Hoc" || TenCot == "QTDTTen_Nuoc" || TenCot == "QTDTTen_Co_So" || TenCot == "QTDTCNganh_DT"
                            || TenCot == "QTDTThang_BD" || TenCot == "QTDTThang_KT")
                        {
                            MyCommon.ShowDialogMessage("Không áp dụng so sánh LIKE với các trường dữ liệu ngày tháng và danh mục");
                            SetNull();
                            return;
                        }
                        else
                        {
                            ConditionString += LienKet + " CB.Khoa In (Select Khoa From tblQT_DT QTDT Where QTDT.DauMoiID=CB.DauMoiID And QTDT." + TenCot.Replace("QTDT", "") + " Like @" + TenCot + i + ") ";
                            arrParam.Add(SqlHelper.CreateParameterObject("@" + TenCot + i, SqlDbType.NVarChar, ParameterDirection.Input, "%" + GiaTri + "%"));
                        }
                    }
                    else
                    {
                        if (TenCot == "QTDTThang_BD" || TenCot == "QTDTThang_KT")
                        {
                            #region Nếu là ngày tháng và giá trị là sai thì setnull
                            GiaTri = MyCommon.MyDateTime.ToYYYYMMDD(GiaTri);
                            if (GiaTri == "")
                            {
                                MyCommon.ShowDialogMessage("Giá trị ngày tháng phải được nhập theo các dạng sau: yyyy; MM/yyyy; dd/MM/yyyy");
                                SetNull();
                                return;
                            }

                            ConditionString += LienKet + " CB.Khoa In (Select Khoa From tblQT_DT QTDT Where QTDT.DauMoiID=CB.DauMoiID And QTDT." + TenCot.Replace("QTDT", "") + " " + SoSanh + " @" + TenCot + i + ") ";
                            arrParam.Add(SqlHelper.CreateParameterObject("@" + TenCot + i, SqlDbType.DateTime, ParameterDirection.Input, MyCommon.MyDateTime.ToDate_YMD(GiaTri)));
                            #endregion Nếu là ngày tháng và giá trị là sai thì setnull
                        }
                        else
                        {
                            #region tất cả trường hợp khác

                            ConditionString += LienKet + " CB.Khoa In (Select Khoa From tblQT_DT QTDT Where QTDT.DauMoiID=CB.DauMoiID And QTDT." + TenCot.Replace("QTDT", "") + " " + SoSanh + " @" + TenCot + i + ") ";

                            if (TenCot == "QTDTLoai_Hinh" || TenCot == "QTDTCap_Hoc" || TenCot == "QTDTTen_Nuoc" || TenCot == "QTDTTen_Co_So" || TenCot == "QTDTCNganh_DT")
                            {
                                //Các trường lấy dữ liệu trong danh mục từ điển chỉ cho phép so sánh bằng, và so sánh khác
                                if (SoSanh != "=" && SoSanh != "<>")
                                {
                                    MyCommon.ShowDialogMessage("Các trường dữ liệu lấy trong danh mục từ điển chỉ cho phép so sánh bằng, so sánh khác ");
                                    SetNull();
                                    return;
                                }
                                GiaTri = SelectedTag;
                            }
                            arrParam.Add(SqlHelper.CreateParameterObject("@" + TenCot + i, SqlDbType.NVarChar, ParameterDirection.Input, GiaTri));
                            #endregion tất cả trường hợp khác
                        }
                    }
                    #endregion Build điều kiện tìm kiếm theo QTDT
                }
                else if (TenCot.Substring(0, 4) == "ThanNhan")
                {
                    #region Build điều kiện tìm kiếm theo ThanNhan


                    if (SoSanh == "Like")//không like theo Datetime, các trường làm khóa ngoại
                    {
                        if (TenCot == "ThanNhanQuan_He")
                        {
                            MyCommon.ShowDialogMessage("Không áp dụng so sánh LIKE với các trường dữ liệu ngày tháng và danh mục");
                            SetNull();
                            return;
                        }
                        else
                        {
                            ConditionString += LienKet + " CB.Khoa In (Select Khoa From tblThanNhan ThanNhan Where ThanNhan.DauMoiID=CB.DauMoiID And ThanNhan." + TenCot.Replace("ThanNhan", "") + " Like @" + TenCot + i + ") ";
                            arrParam.Add(SqlHelper.CreateParameterObject("@" + TenCot + i, SqlDbType.NVarChar, ParameterDirection.Input, "%" + GiaTri + "%"));
                        }
                    }
                    else
                    {
                        #region tất cả trường hợp khác

                        ConditionString += LienKet + " CB.Khoa In (Select Khoa From tblThanNhan ThanNhan Where ThanNhan.DauMoiID=CB.DauMoiID And ThanNhan." + TenCot.Replace("ThanNhan", "") + " " + SoSanh + " @" + TenCot + i + ") ";

                        if (TenCot == "ThanNhanQuan_He")
                        {
                            //Các trường lấy dữ liệu trong danh mục từ điển chỉ cho phép so sánh bằng, và so sánh khác
                            if (SoSanh != "=" && SoSanh != "<>")
                            {
                                MyCommon.ShowDialogMessage("Các trường dữ liệu lấy trong danh mục từ điển chỉ cho phép so sánh bằng, so sánh khác ");
                                SetNull();
                                return;
                            }
                            GiaTri = SelectedTag;
                        }
                        arrParam.Add(SqlHelper.CreateParameterObject("@" + TenCot + i, SqlDbType.NVarChar, ParameterDirection.Input, GiaTri));
                        #endregion tất cả trường hợp khác

                    }
                    #endregion Build điều kiện tìm kiếm theo ThanNhan
                }

                else if (TenCot.Substring(0, 4) == "Tieng")
                {
                    #region Build điều kiện tìm kiếm theo Tieng


                    if (SoSanh == "Like")//không like theo Datetime, các trường làm khóa ngoại
                    {
                        if (TenCot == "TiengMa_NNgu" || TenCot == "TiengMa_DToc" || TenCot == "TiengThoiGian")
                        {
                            MyCommon.ShowDialogMessage("Không áp dụng so sánh LIKE với các trường dữ liệu ngày tháng và danh mục");
                            SetNull();
                            return;
                        }
                        else
                        {
                            ConditionString += LienKet + " CB.Khoa In (Select Khoa From tblTieng Tieng Where Tieng.DauMoiID=CB.DauMoiID And Tieng." + TenCot.Replace("Tieng", "") + " Like @" + TenCot + i + ") ";
                            arrParam.Add(SqlHelper.CreateParameterObject("@" + TenCot + i, SqlDbType.NVarChar, ParameterDirection.Input, "%" + GiaTri + "%"));
                        }
                    }
                    else
                    {
                        if (TenCot == "TiengThoiGian")
                        {
                            #region Nếu là ngày tháng và giá trị là sai thì setnull
                            GiaTri = MyCommon.MyDateTime.ToYYYYMMDD(GiaTri);
                            if (GiaTri == "")
                            {
                                MyCommon.ShowDialogMessage("Giá trị ngày tháng phải được nhập theo các dạng sau: yyyy; MM/yyyy; dd/MM/yyyy");
                                SetNull();
                                return;
                            }

                            ConditionString += LienKet + " CB.Khoa In (Select Khoa From tblTieng Tieng Where Tieng.DauMoiID=CB.DauMoiID And Tieng." + TenCot.Replace("Tieng", "") + " " + SoSanh + " @" + TenCot + i + ") ";
                            arrParam.Add(SqlHelper.CreateParameterObject("@" + TenCot + i, SqlDbType.DateTime, ParameterDirection.Input, MyCommon.MyDateTime.ToDate_YMD(GiaTri)));
                            #endregion Nếu là ngày tháng và giá trị là sai thì setnull
                        }
                        else
                        {
                            #region tất cả trường hợp khác

                            ConditionString += LienKet + " CB.Khoa In (Select Khoa From tblTieng Tieng Where Tieng.DauMoiID=CB.DauMoiID And Tieng." + TenCot.Replace("Tieng", "") + " " + SoSanh + " @" + TenCot + i + ") ";

                            if (TenCot == "TiengMa_NNgu" || TenCot == "TiengMa_DToc")
                            {
                                //Các trường lấy dữ liệu trong danh mục từ điển chỉ cho phép so sánh bằng, và so sánh khác
                                if (SoSanh != "=" && SoSanh != "<>")
                                {
                                    MyCommon.ShowDialogMessage("Các trường dữ liệu lấy trong danh mục từ điển chỉ cho phép so sánh bằng, so sánh khác ");
                                    SetNull();
                                    return;
                                }
                                GiaTri = SelectedTag;
                            }
                            arrParam.Add(SqlHelper.CreateParameterObject("@" + TenCot + i, SqlDbType.NVarChar, ParameterDirection.Input, GiaTri));
                            #endregion tất cả trường hợp khác
                        }
                    }
                    #endregion Build điều kiện tìm kiếm theo Tieng
                }
                else if (TenCot.Substring(0, 4) == "SKKhac")
                {
                    #region Build điều kiện tìm kiếm theo SKKhac


                    if (SoSanh == "Like")//không like theo Datetime, các trường làm khóa ngoại
                    {
                        if (TenCot == "SKKhacThang_SK")
                        {
                            MyCommon.ShowDialogMessage("Không áp dụng so sánh LIKE với các trường dữ liệu ngày tháng và danh mục");
                            SetNull();
                            return;
                        }
                        else
                        {
                            ConditionString += LienKet + " CB.Khoa In (Select Khoa From tblKhac SKKhac Where SKKhac.DauMoiID=CB.DauMoiID And SKKhac." + TenCot.Replace("SKKhac", "") + " Like @" + TenCot + i + ") ";
                            arrParam.Add(SqlHelper.CreateParameterObject("@" + TenCot + i, SqlDbType.NVarChar, ParameterDirection.Input, "%" + GiaTri + "%"));
                        }
                    }
                    else
                    {
                        if (TenCot == "SKKhacThang_SK")
                        {
                            #region Nếu là ngày tháng và giá trị là sai thì setnull
                            GiaTri = MyCommon.MyDateTime.ToYYYYMMDD(GiaTri);
                            if (GiaTri == "")
                            {
                                MyCommon.ShowDialogMessage("Giá trị ngày tháng phải được nhập theo các dạng sau: yyyy; MM/yyyy; dd/MM/yyyy");
                                SetNull();
                                return;
                            }

                            ConditionString += LienKet + " CB.Khoa In (Select Khoa From tblKhac SKKhac Where SKKhac.DauMoiID=CB.DauMoiID And SKKhac." + TenCot.Replace("SKKhac", "") + " " + SoSanh + " @" + TenCot + i + ") ";
                            arrParam.Add(SqlHelper.CreateParameterObject("@" + TenCot + i, SqlDbType.DateTime, ParameterDirection.Input, MyCommon.MyDateTime.ToDate_YMD(GiaTri)));
                            #endregion Nếu là ngày tháng và giá trị là sai thì setnull
                        }
                        else
                        {
                            #region tất cả trường hợp khác

                            ConditionString += LienKet + " CB.Khoa In (Select Khoa From tblKhac SKKhac Where SKKhac.DauMoiID=CB.DauMoiID And SKKhac." + TenCot.Replace("SKKhac", "") + " " + SoSanh + " @" + TenCot + i + ") ";

                            arrParam.Add(SqlHelper.CreateParameterObject("@" + TenCot + i, SqlDbType.NVarChar, ParameterDirection.Input, GiaTri));
                            #endregion tất cả trường hợp khác
                        }
                    }
                    #endregion Build điều kiện tìm kiếm theo SKKhac
                }

                else
                {
                    #region Lọc theo các trường của bảng tblCanBo
                    if (SoSanh == "Like")
                    {
                        #region SoSanh == "Like" Không áp dụng với kiểu ngày tháng, không áp dụng cho các trường lấy từ danh mục
                        if (TenCot == "Ngay_Sinh" || TenCot == "Thang_CBac" || TenCot == "Thang_NL" || TenCot == "Thang_CVu" || TenCot == "Ngay_VDang" ||
                            TenCot == "Ngay_CDCT" || TenCot == "Thang_Doan" || TenCot == "Thang_CM" || TenCot == "Thang_BC" || TenCot == "Thang_NNgu" ||
                            TenCot == "Thang_XNgu" || TenCot == "Thang_TNgu" || TenCot == "Ngay_Vao" || TenCot == "Ngay_Ra"
                            || ChiTieu == "Cap_Bac" || ChiTieu == "Lan_NLuong" || ChiTieu == "Chuc_Vu" || ChiTieu == "Don_Vi_CT" || ChiTieu == "Khoi_CTac" ||
                            ChiTieu == "Binh_Chung" || ChiTieu == "Loai_CBo" || ChiTieu == "Van_Hoa" || ChiTieu == "HocHam" || ChiTieu == "HocVi" ||
                            ChiTieu == "Nguon_VDN" || ChiTieu == "NQuan_HT" || ChiTieu == "TQuan_HT" || ChiTieu == "Loai_SKhoe" || ChiTieu == "Huong_SD" ||
                            ChiTieu == "Ly_Do_Vao" || ChiTieu == "Ly_Do_Ra" || ChiTieu == "QTCDBat_Dau" || ChiTieu == "QTCDKet_Thuc" || ChiTieu == "QTCTDen"
                            || ChiTieu == "QTCTTG_Cap" || ChiTieu == "QTCTTG_Dang" || ChiTieu == "QTDGThang_SK" || ChiTieu == "QTDGThang_BD"
                            || ChiTieu == "QTDGThang_KT" || ChiTieu == "ThanNhanNam_Sinh" || ChiTieu == "TiengThoiGian" || ChiTieu == "SKKhacThang_SK")
                        {
                            MyCommon.ShowDialogMessage("Không áp dụng so sánh LIKE với các trường ngày tháng, Các trường dữ liệu từ danh mục từ điển");
                            SetNull();
                            return;
                        }

                        GiaTri = "%" + GiaTri + "%";
                        ConditionString += LienKet + " " + TheMo + " CB." + TenCot + " Like @" + TenCot + i + " " + TheDong;
                        arrParam.Add(SqlHelper.CreateParameterObject("@" + TenCot + i, SqlDbType.NVarChar, ParameterDirection.Input, GiaTri));
                        #endregion SoSanh == "Like"
                    }
                    else
                    {
                        if (TenCot == "Ngay_Sinh" || TenCot == "Ngay_Vao" || TenCot == "Ngay_Ra" || TenCot == "Thang_CBac" || TenCot == "Thang_NL" || TenCot == "Thang_CVu" || TenCot == "Ngay_VDang" || TenCot == "Ngay_CDCT" || TenCot == "Thang_Doan" || TenCot == "Thang_CM" || TenCot == "Thang_BC" || TenCot == "Thang_NNgu" || TenCot == "Thang_XNgu" || TenCot == "Thang_TNgu")
                        {
                            #region Nếu là ngày tháng và giá trị là sai thì setnull
                            GiaTri = MyCommon.MyDateTime.ToYYYYMMDD(GiaTri);
                            if (GiaTri == "")
                            {
                                MyCommon.ShowDialogMessage("Giá trị ngày tháng phải được nhập theo các dạng sau: yyyy; MM/yyyy; dd/MM/yyyy");
                                SetNull();
                                return;
                            }
                            ConditionString += LienKet + " " + TheMo + " CB." + TenCot + " " + SoSanh + " @" + TenCot + i + " " + TheDong;

                            arrParam.Add(SqlHelper.CreateParameterObject("@" + TenCot + i, SqlDbType.DateTime, ParameterDirection.Input, MyCommon.MyDateTime.ToDate_YMD(GiaTri)));
                            #endregion Nếu là ngày tháng và giá trị là sai thì setnull
                        }
                        else
                        {
                            #region tất cả trường hợp khác

                            ConditionString += LienKet + " " + TheMo + " CB." + TenCot + " " + SoSanh + " @" + TenCot + i + " " + TheDong;

                            if (TenCot == "Cap_Bac" || TenCot == "Lan_NLuong" || TenCot == "Chuc_Vu" || TenCot == "Don_Vi_CT" || TenCot == "Khoi_CTac" 
                                || TenCot == "Binh_Chung" || TenCot == "Loai_CBo" || TenCot == "Van_Hoa" || TenCot == "HocHam" || TenCot == "HocVi" 
                                || TenCot == "Nguon_VDN" || TenCot == "NQuan_HT" || TenCot == "TQuan_HT" || TenCot == "Loai_SKhoe"
                                || TenCot == "Huong_SD" || TenCot == "Ly_Do_Vao" || TenCot == "Ly_Do_Ra" || TenCot == "Nganh_CTac")
                            {
                                //Các trường lấy dữ liệu trong danh mục từ điển chỉ cho phép so sánh bằng, và so sánh khác
                                if (SoSanh != "=" && SoSanh != "<>")
                                {
                                    MyCommon.ShowDialogMessage("Các trường dữ liệu lấy trong danh mục từ điển chỉ cho phép so sánh bằng, so sánh khác ");
                                    SetNull();
                                    return;
                                }
                                GiaTri = SelectedTag;
                            }
                            arrParam.Add(SqlHelper.CreateParameterObject("@" + TenCot + i, SqlDbType.NVarChar, ParameterDirection.Input, GiaTri));
                            #endregion tất cả trường hợp khác
                        }
                    }
                    #endregion Lọc theo các trường của bảng tblCanBo
                }
            }
        }
        private void txtGiaTriGrid_ButtonClick(object sender, DevExpress.XtraEditors.Controls.ButtonPressedEventArgs e)
        {
            string TuDien = "";
            MainGridView.SetFocusedRowCellValue("SelectTag", "");
            TuDien = MainGridView.GetFocusedRowCellValue("ChiTieu").ToString();
            if (TuDien == "Cap_Bac")
                MyCommon.MyTuDien(SelectedDauMoiID, sender, MyConst.TD.Cap.Ma, MyConst.TD.Cap.Ten);
            else if (TuDien == "Lan_NLuong")
                MyCommon.MyTuDien(SelectedDauMoiID, sender, MyConst.TD.NangLuong.Ma, MyConst.TD.NangLuong.Ten);
            else if (TuDien == "Chuc_Vu")
                MyCommon.MyTuDien(SelectedDauMoiID, sender, MyConst.TD.Chuc.Ma, MyConst.TD.Chuc.Ten);
            else if (TuDien == "Don_Vi_CT")
                MyCommon.MyTuDien(SelectedDauMoiID, sender, MyConst.TD.BoPhan.Ma, MyConst.TD.BoPhan.Ten);
            else if (TuDien == "Khoi_CTac")
                MyCommon.MyTuDien(SelectedDauMoiID, sender, MyConst.TD.Khoi_CT.Ma, MyConst.TD.Khoi_CT.Ten);
            else if (TuDien == "Binh_Chung")
                MyCommon.MyTuDien(SelectedDauMoiID, sender, MyConst.TD.BinhC.Ma, MyConst.TD.BinhC.Ten);
            else if (TuDien == "Loai_CBo")
                MyCommon.MyTuDien(SelectedDauMoiID, sender, MyConst.TD.LoaiCB.Ma, MyConst.TD.LoaiCB.Ten);
            else if (TuDien == "Van_Hoa")
                MyCommon.MyTuDien(SelectedDauMoiID, sender, MyConst.TD.VanHoa.Ma, MyConst.TD.VanHoa.Ten);
            else if (TuDien == "HocHam")
                MyCommon.MyTuDien(SelectedDauMoiID, sender, MyConst.TD.HocHam.Ma, MyConst.TD.HocHam.Ten);
            else if (TuDien == "HocVi")
                MyCommon.MyTuDien(SelectedDauMoiID, sender, MyConst.TD.HocVi.Ma, MyConst.TD.HocVi.Ten);
            else if (TuDien == "Nguon_VDN")
                MyCommon.MyTuDien(SelectedDauMoiID, sender, MyConst.TD.Nguon.Ma, MyConst.TD.Nguon.Ten);
            else if (TuDien == "NQuan_HT")
                MyCommon.MyTuDien(SelectedDauMoiID, sender, MyConst.TD.Que.Ma, MyConst.TD.Que.Ten);
            else if (TuDien == "TQuan_HT")
                MyCommon.MyTuDien(SelectedDauMoiID, sender, MyConst.TD.Que.Ma, MyConst.TD.Que.Ten);
            else if (TuDien == "Loai_SKhoe")
                MyCommon.MyTuDien(SelectedDauMoiID, sender, MyConst.TD.SucK.Ma, MyConst.TD.SucK.Ten);
            else if (TuDien == "Huong_SD")
                MyCommon.MyTuDien(SelectedDauMoiID, sender, MyConst.TD.SuDung.Ma, MyConst.TD.SuDung.Ten);
            else if (TuDien == "NQuan_HT")
                MyCommon.MyTuDien(SelectedDauMoiID, sender, MyConst.TD.Que.Ma, MyConst.TD.Que.Ten);
            else if (TuDien == "TQuan_HT")
                MyCommon.MyTuDien(SelectedDauMoiID, sender, MyConst.TD.Que.Ma, MyConst.TD.Que.Ten);
            else if (TuDien == "Nganh_CTac")
                MyCommon.MyTuDien(SelectedDauMoiID, sender, MyConst.TD.Ng_CNCT.Ma, MyConst.TD.Ng_CNCT.Ten);

            else if (TuDien == "Ly_Do_Vao")
                MyCommon.MyTuDien(SelectedDauMoiID, sender, MyConst.TD.LDo_Tang.Ma, MyConst.TD.LDo_Tang.Ten);
            else if (TuDien == "Ly_Do_Ra")
                MyCommon.MyTuDien(SelectedDauMoiID, sender, MyConst.TD.LDo_Giam.Ma, MyConst.TD.LDo_Giam.Ten);
            else if (TuDien == "QTCDCh_Truong")
                MyCommon.MyTuDien(SelectedDauMoiID, sender, MyConst.TD.ChienTr.Ma, MyConst.TD.ChienTr.Ten);
            else if (TuDien == "QTCDCVi_ChDau")
                MyCommon.MyTuDien(SelectedDauMoiID, sender, MyConst.TD.CVCD.Ma, MyConst.TD.CVCD.Ten);
            else if (TuDien == "QTCTChuc")
                MyCommon.MyTuDien(SelectedDauMoiID, sender, MyConst.TD.Chuc.Ma, MyConst.TD.Chuc.Ten);
            else if (TuDien == "QTCTDonVi")
                MyCommon.MyTuDien(SelectedDauMoiID, sender, MyConst.TD.BoPhan.Ma, MyConst.TD.BoPhan.Ten);
            else if (TuDien == "QTDGSKien_DGia")
                MyCommon.MyTuDien(SelectedDauMoiID, sender, MyConst.TD.SK_DGia.Ma, MyConst.TD.SK_DGia.Ten);
            else if (TuDien == "QTDTLoai_Hinh")
                MyCommon.MyTuDien(SelectedDauMoiID, sender, MyConst.TD.LoaiHinh.Ma, MyConst.TD.LoaiHinh.Ten);
            else if (TuDien == "QTDTCap_Hoc")
                MyCommon.MyTuDien(SelectedDauMoiID, sender, MyConst.TD.CapHoc.Ma, MyConst.TD.CapHoc.Ten);
            else if (TuDien == "QTDTTen_Nuoc")
                MyCommon.MyTuDien(SelectedDauMoiID, sender, MyConst.TD.Nuoc.Ma, MyConst.TD.Nuoc.Ten);
            else if (TuDien == "QTDTTen_Co_So")
                MyCommon.MyTuDien(SelectedDauMoiID, sender, MyConst.TD.Truong.Ma, MyConst.TD.Truong.Ten);
            else if (TuDien == "QTDTCNganh_DT")
                MyCommon.MyTuDien(SelectedDauMoiID, sender, MyConst.TD.Ng_CNDT.Ma, MyConst.TD.Ng_CNDT.Ten);
            else if (TuDien == "ThanNhanQuan_He")
                MyCommon.MyTuDien(SelectedDauMoiID, sender, MyConst.TD.QuanHe.Ma, MyConst.TD.QuanHe.Ten);
            else if (TuDien == "TiengMa_NNgu")
                MyCommon.MyTuDien(SelectedDauMoiID, sender, MyConst.TD.NgoaiNgu.Ma, MyConst.TD.NgoaiNgu.Ten);
            else if (TuDien == "TiengMa_DToc")
                MyCommon.MyTuDien(SelectedDauMoiID, sender, MyConst.TD.DanToc.Ma, MyConst.TD.DanToc.Ten);



            MainGridView.SetFocusedRowCellValue("SelectTag", ((DevExpress.XtraEditors.ButtonEdit)sender).Tag);
            MainGridView.SetFocusedRowCellValue("GiaTri", ((DevExpress.XtraEditors.ButtonEdit)sender).Text);
        }

        private void btnXemDK_Click(object sender, EventArgs e)
        {
            BuildCondition();
            MyCommon.ShowDialogMessage(ConditionText);
        }

        private void MainGridView_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.Delete)
            {
                MainGridView.DeleteSelectedRows();
                ((DataTable)dgData.DataSource).AcceptChanges();
            }
        }


    }
}